/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package familytree.negocio.bo;

import familytree.negocio.IUsuarioProcessor;
import familytree.persistencia.dao.DAOFactory;
import familytree.persistencia.dao.UsuarioDAO;
import familytree.persistencia.dao.hibernate.HibernateUsuarioDAO;
import familytree.persistencia.pojos.Arbol;
import familytree.persistencia.pojos.Nodo;
import familytree.persistencia.pojos.Usuario;
import java.util.List;

/**
 *
 * @author Antonio
 */
public class UsuarioBO implements IUsuarioProcessor {
    private DAOFactory dAOFactory = DAOFactory.instance(DAOFactory.HIBERNATE);

    /**
     Comprobamos que no existe el mismo correo en esa familia
     */
    public boolean existeUsuarioConCorreo(String correo, Arbol arbol) {
        
        UsuarioDAO usuario = dAOFactory.getUsuarioDAO();
        List<Usuario> usuarios = usuario.getUsuarioByMailAndFamily(correo,arbol);
        if (!usuarios.isEmpty())
            return true;
        else
            return false;
        
    }
    /**
     *Devuelve el usuario según su correo y contraseña
     * @param correo Correo del usuario
     * @param password Contraseña del usuario
     * @return Usuario si existe, null en otro caso
     */
    public  Usuario getUsuario(String correo, String password){
       UsuarioDAO usuarioDAO = dAOFactory.getUsuarioDAO();
       List<Usuario> usuarios = usuarioDAO.getUsuarioByMailAndPass(correo, password);
       if (!usuarios.isEmpty()){
            return usuarios.get(0);
       }
       else{
        return null;
       }
           
    }
    
    public boolean existeUsuarioConCorreo(String correo)
    {
   
        boolean res = true;
        UsuarioDAO usuarioDAO = dAOFactory.getUsuarioDAO();
        if(usuarioDAO.getUsuarioByMail(correo).isEmpty())
            res = false;
        return res;
    }

    public Usuario insert(Usuario usuario, Nodo nodo) {
        UsuarioDAO usuarioDAO = dAOFactory.getUsuarioDAO();
        usuario = usuarioDAO.insert(usuario,nodo);
        return usuario;
    }
    
    
    /**
     Modifica el usuario
     *  @param usuario Usuario a modificar
     */
    public  void setUsuario(Usuario usuario)
    {
        UsuarioDAO usuarioDAO = dAOFactory.getUsuarioDAO();
        usuarioDAO.makePersistent(usuario);
    }
    
    /**
     Elimina un usuario
     * @param usuario Usuario que se va a eliminar
     */
    public  void deleteUsuario(Usuario usuario)
    {
         UsuarioDAO usuarioDAO = dAOFactory.getUsuarioDAO();
         usuarioDAO.makeTransient(usuario);
    }
    
            
}
